package com.itheima.io;

public class 总结 {
    /*
        字节流和字符流
            字节流的定义
                FileInputStream = new FileInputStream(url / File)
            特点
                最小单位为 字节
                可以通过传入字节数组实现一次读取或写入一个数组
                read()   read(char[])
                write() int ; char[] 0 , len
        字节缓冲流
            定义
            BufferedInputStream(FileInputStream)
            特点
            在内存创建了一个8kb(8192)的缓存数组,一次读取一整个字节数组的长度进内存,在内存中交换位置在写入磁盘
            因为大量的数据交换放在了内存中,所以速度远超普通字节流
            也可以通过传入一个字节数组,让其在内存中的交换也以字节数组为单位,进一步提高速度

        由于字节流是以字节为基本单位读取写入的,因此可能出现数据丢失导致的乱码
            例如在windows默认的码表GBK(国标码)中,中文是以两个字节码形式储存的
            而在Unicode(万国码)中,支持中文的UTF8编码里面,中文是通过三个字节码存储的
        因此在以字节为单位操作中文字符,会识别成三个单独的字节码导致乱码

        解决方案也有,就是定义一个足够大的字节数组一次性将文件中的字节数据全部获取,然后利用String()方法,
        用计算机默认的编码格式解码就能获取完整的信息.但是这个方法也有个漏洞,面对未知数据足够大很难在程序中定义

        为了解决这个问题因此引入一个新的io流
        字符流
            定义格式
                FileReader/Writer (new File)
                read()/writer()
                read()  rend(char[])
                write() int, char[] start num,String    String index num;
            特点:
                字符流是以字符为单位操作数据的,本质是字节流+编码表;在底层会通过码表自动进行字节拼接成中文,
                    也由于这个特性,无法进行文件复制的操作
                字符流会将文件先放入内存中的缓存区,但缓存区满了或者文件读写结束后才会写入磁盘,因此为了保证数据的及时性
                和安全性,可以在一段操作完成后通过flush()方法手动将文件写入磁盘

            字符缓冲流:
                BufferedWriter()
                    和字节缓冲流一样,在内存中分别定义了写入和写出的8192字节数组缓存区

                    里面有两个特有的方法
                        readLine() 一次读一整行
                        newLine()   获取系统的换行符




     */
}
